/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package muhnes.sizoo.controlador;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;
import muhnes.sizoo.HibernateUtilSeguridad;
import muhnes.sizoo.dal.PrivilegioDao;
import muhnes.sizoo.dal.PrivilegioDaoImpl;
import muhnes.sizoo.dal.RolDao;
import muhnes.sizoo.dal.RolDaoImpl;
import muhnes.sizoo.modelo.Privilegio;
import muhnes.sizoo.modelo.Rol;

/**
 *
 * @author Neotaku
 */
@ManagedBean(name = "rolBean")
@ViewScoped
public class RolBean implements Serializable {
    
    private Rol rol;
    private List< Rol > listaRoles;
    private HashMap< Privilegio, Boolean > listaPrivilegios;

    /** Creates a new instance of RolBean */
    public RolBean() {
        rol = new Rol();
    }

    public Rol getRol() {
        return rol;
    }

    public void setRol(Rol rol) {
        this.rol = rol;
    }

    public List< Rol > getListaRoles() {
        if( listaRoles == null ) {
            RolDao dao = new RolDaoImpl( HibernateUtilSeguridad.getSessionFactory() );
            listaRoles = dao.buscarTodos();
        }
        return listaRoles;
    }
    
    public void prepararAdicion( ActionEvent event  ){
        rol = new Rol();
    }
    
    public void prepararModificacion( Rol rol ){
        this.rol = rol;
    }
    
    public void prepararEliminacion( Rol rol ){
        this.rol = rol;
    }

    public void agregarRol( ActionEvent event ){
        RolDaoImpl dao = new RolDaoImpl( HibernateUtilSeguridad.getSessionFactory() );
        dao.guardar( rol );
        recrearModelo();
    }

    public void actualizarRol( ActionEvent event ){
        RolDaoImpl dao = new RolDaoImpl( HibernateUtilSeguridad.getSessionFactory() );
        dao.actualizar( rol );
        recrearModelo();
    }
    
    public void eliminarRol( ActionEvent event ){
        RolDaoImpl dao = new RolDaoImpl( HibernateUtilSeguridad.getSessionFactory() );
        dao.eliminar( rol );
        recrearModelo();
    }
    
    public List< Map.Entry< Privilegio, Boolean > > getListaPrivilegios() {
        /*if( listaPrivilegios == null ) {
            PrivilegioDao dao = new PrivilegioDaoImpl();
            List< Privilegio > privilegios = dao.buscarTodos();
            Set< Privilegio > privilegiosOtorgados = rol.getPrivilegios();
            listaPrivilegios = new HashMap();
            for( Privilegio privilegio : privilegios ) {
                Boolean otorgado = privilegiosOtorgados.contains( privilegio );
                listaPrivilegios.put( privilegio, otorgado );
            }
        }*/
        return new ArrayList<Map.Entry<Privilegio, Boolean>>( listaPrivilegios.entrySet() );
    }
    
    public void actualizarPrivilegio( Map.Entry< Privilegio, Boolean > delta ) {
        Privilegio privilegio = delta.getKey();
        Boolean concedido = delta.getValue();
        
        if( concedido ) {
            //rol.getPrivilegios().add( privilegio );
        }
        else {
            //rol.getPrivilegios().remove( privilegio );
        }
        
        RolDao dao = new RolDaoImpl( HibernateUtilSeguridad.getSessionFactory() );
        dao.actualizar( rol );
    }
    
    void recrearModelo() {
        listaRoles = null;
        listaPrivilegios = null;
    }

}


